package com.jrh.biz.product;

import java.util.List;

import com.jrh.domain.common.Page;
import com.jrh.domain.entity.FeatureValue;
import com.jrh.domain.entity.Product;

public interface ProductService {

    /**
     * 根据产品ID列表取得产品概要信息
     * 
     * @param ids
     * @return
     */
    public List<Product> listByIds(List<Long> ids);

    /**
     * 根据产品ID列表取得产品概要信息
     * 
     * @param ids
     * @return
     */
    public List<Product> listByIds(String[] ids);

    /**
     * 根据产品ID列表取得产品概要信息
     * 
     * @param ids
     * @return
     */
    public List<Product> listByIds(String ids);

    /**
     * 根据分类，商品系列，品牌查找商品
     * 
     * @param brandId
     * @param categoryId
     * @param psetId
     * @return
     */
    Page<Product> getProductInBrandByCateAndPSet(Long brandId, Long categoryId, Long psetId, Integer start,
                                                 Integer pageSize);

    /**
     * 在商品中找到推荐产品
     * 
     * @param brandId
     * @return
     */
    List<Product> getRecommendedProductInBrand(Long brandId);

    /**
     * 在商品中找到该品牌下所有的商品
     * 
     * @param brandId
     * @return
     */
    Page<Product> getAllProductInBrand(Long brandId, Integer start, Integer pageSize);

    boolean updateProductStatus(Product product, boolean enable);

    boolean updateProductBySale(Product product);

    boolean updateProductByUser(Product product);

    void deleteProduct(Long productId);

    Product getProductById(Long productId);

    Product getAvailableProductById(Long productId);

    void createProduct(Product product);

    /**
     * 根据查询条件查询产品
     * 
     * @param cateId
     * @param styleId
     * @param featureValueList
     * @return
     */
    Page<Product> getProductByCateStyleAndFeature(Long cateId, Long styleId, List<FeatureValue> featureValueList,
                                                  Integer start, Integer pageSize);

    List<Product> listProductByCondition(Long brandId, String name);
    
    List<Product> listProductByProductRef(Long refId, String refType);
}
